#include "Historial.h"

Historial::Historial(Modelo *m) {
    for(int i = 0; i < (signed)m->figuras.size(); i++) {
        Punto* pPunto = dynamic_cast<Punto*>( m->figuras[i] );
        Linea* pLinea = dynamic_cast<Linea*>( m->figuras[i] );
        Rectangulo* pRectangulo = dynamic_cast<Rectangulo*>( m->figuras[i] );
        Triangulo* pTriangulo = dynamic_cast<Triangulo*>( m->figuras[i] );
        Circulo* pCirculo = dynamic_cast<Circulo*>( m->figuras[i] );
        Conjunto* pConjunto = dynamic_cast<Conjunto*>( m->figuras[i] );
        Imagen* pImagen = dynamic_cast<Imagen*>( m->figuras[i] );

        if(pPunto) {
            Punto *p = new Punto(*pPunto);
            figuras.push_back(p);
        } else if(pLinea) {
            Linea *l = new Linea(*pLinea);
            figuras.push_back(l);
        } else if(pRectangulo) {
            Rectangulo *r = new Rectangulo(*pRectangulo);
            figuras.push_back(r);
        } else if(pTriangulo) {
            Triangulo *t = new Triangulo(*pTriangulo);
            figuras.push_back(t);
        } else if(pCirculo) {
            Circulo *c = new Circulo(*pCirculo);
            figuras.push_back(c);
        } else if(pConjunto) {
            Conjunto *cj = new Conjunto(*pConjunto);
            figuras.push_back(cj);
        } else if(pImagen) {
            Imagen *img = new Imagen(*pImagen);
            figuras.push_back(img);
        }
    }

    for(int i = 0; i < (signed)m->figurasSeleccionadas.size(); i++) {
        Punto* pPunto = dynamic_cast<Punto*>( m->figurasSeleccionadas[i] );
        Linea* pLinea = dynamic_cast<Linea*>( m->figurasSeleccionadas[i] );
        Rectangulo* pRectangulo = dynamic_cast<Rectangulo*>( m->figurasSeleccionadas[i] );
        Triangulo* pTriangulo = dynamic_cast<Triangulo*>( m->figurasSeleccionadas[i] );
        Circulo* pCirculo = dynamic_cast<Circulo*>( m->figurasSeleccionadas[i] );
        Conjunto* pConjunto = dynamic_cast<Conjunto*>( m->figurasSeleccionadas[i] );
        Imagen* pImagen = dynamic_cast<Imagen*>( m->figurasSeleccionadas[i] );

        if(pPunto) {
            Punto *p = new Punto(*pPunto);
            figurasSeleccionadas.push_back(p);
        } else if(pLinea) {
            Linea *l = new Linea(*pLinea);
            figurasSeleccionadas.push_back(l);
        } else if(pRectangulo) {
            Rectangulo *r = new Rectangulo(*pRectangulo);
            figurasSeleccionadas.push_back(r);
        } else if(pTriangulo) {
            Triangulo *t = new Triangulo(*pTriangulo);
            figurasSeleccionadas.push_back(t);
        } else if(pCirculo) {
            Circulo *c = new Circulo(*pCirculo);
            figurasSeleccionadas.push_back(c);
        } else if(pConjunto) {
            Conjunto *cj = new Conjunto(*pConjunto);
            figurasSeleccionadas.push_back(cj);
        } else if(pImagen) {
            Imagen *img = new Imagen(*pImagen);
            figurasSeleccionadas.push_back(img);
        }
    }

    for(int i = 0; i < (signed)m->portapapeles.size(); i++) {
        Punto* pPunto = dynamic_cast<Punto*>( m->portapapeles[i] );
        Linea* pLinea = dynamic_cast<Linea*>( m->portapapeles[i] );
        Rectangulo* pRectangulo = dynamic_cast<Rectangulo*>( m->portapapeles[i] );
        Triangulo* pTriangulo = dynamic_cast<Triangulo*>( m->portapapeles[i] );
        Circulo* pCirculo = dynamic_cast<Circulo*>( m->portapapeles[i] );
        Conjunto* pConjunto = dynamic_cast<Conjunto*>( m->portapapeles[i] );
        Imagen* pImagen = dynamic_cast<Imagen*>( m->portapapeles[i] );

        if(pPunto) {
            Punto *p = new Punto(*pPunto);
            portapapeles.push_back(p);
        } else if(pLinea) {
            Linea *l = new Linea(*pLinea);
            portapapeles.push_back(l);
        } else if(pRectangulo) {
            Rectangulo *r = new Rectangulo(*pRectangulo);
            portapapeles.push_back(r);
        } else if(pTriangulo) {
            Triangulo *t = new Triangulo(*pTriangulo);
            portapapeles.push_back(t);
        } else if(pCirculo) {
            Circulo *c = new Circulo(*pCirculo);
            portapapeles.push_back(c);
        } else if(pConjunto) {
            Conjunto *cj = new Conjunto(*pConjunto);
            portapapeles.push_back(cj);
        } else if(pImagen) {
            Imagen *img = new Imagen(*pImagen);
            portapapeles.push_back(img);
        }
    }
}
